﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SachOnlineLibrary.BLL;
using SachOnlineLibrary.Public;
public partial class WebUserControl : System.Web.UI.UserControl
{
    SachBLL lib = new SachBLL();
    public static List<Sach> listsach;
    List<Loai> listloai = new List<Loai>();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DropDownList_Load();
            GridviewSach_Load();
            lblThongBao.Text = "";
        }
    }
    private void GridviewSach_Load()
    {
        listsach = lib.LietKeTatCaSach();
        Session["listsach"] = listsach;
        gdvSach.DataSource = listsach.Where(s=>s.TrangThai.Equals(true)).ToList();
        gdvSach.DataBind();
    }
    private void DropDownList_Load()
    {
        listloai = lib.LietKeTatCaLoai();
        Loai loai = new Loai();
        loai.TenLoai = "--Chọn loại--";
        loai.MaLoai = 0;
        listloai.Insert(0, loai);
        Session["Loaisach"] = listloai;
        List<Loai> listloailoc = lib.LietKeTatCaLoai();
        Loai item = new Loai();
        item.TenLoai = "Tất cả các loại";
        item.MaLoai = 0;
        listloailoc.Insert(0, item);
        ddlLoaiSach.DataSource = listloailoc;
        ddlLoaiSach.DataTextField = "TenLoai";
        ddlLoaiSach.DataValueField = "MaLoai";
        ddlLoaiSach.DataBind();
    }
    private void HienThiThongBao(String thongbao)
    {
        lblThongBao.Text = thongbao;
        lblThongBao.Visible = true;
    }
    protected void gdvSach_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "ThemSach")
        {
            int empty;
            DropDownList ddlThemLoai = (DropDownList)gdvSach.FooterRow.FindControl("ddlThemLoai");
            TextBox txtThemTenSach = (TextBox)gdvSach.FooterRow.FindControl("txtThemTenSach");
            TextBox txtThemNhaXuatBan = (TextBox)gdvSach.FooterRow.FindControl("txtThemNhaXuatBan");
            DropDownList ddlThemSoLuong = (DropDownList)gdvSach.FooterRow.FindControl("ddlThemSoLuong");
            TextBox txtThemGiaTien = (TextBox)gdvSach.FooterRow.FindControl("txtThemGiaTien");
            TextBox txtThemTacGia = (TextBox)gdvSach.FooterRow.FindControl("txtThemTacGia");
            TextBox txtThemMoTa = (TextBox)gdvSach.FooterRow.FindControl("txtThemMoTa");
            FileUpload fuThemHinh = (FileUpload)gdvSach.FooterRow.FindControl("fuThemHinh");

            Sach item = listsach.SingleOrDefault(s => s.TenSach.Equals(txtThemTenSach.Text));

            if (txtThemTenSach.Text.Trim().Length == 0 || txtThemTenSach.Text.Trim().Length >= 100)
            {
                HienThiThongBao("Tên sách không được để trống hoặc dài quá 100 ký tự");
            }
            else if (int.Parse(ddlThemLoai.SelectedValue) == 0)
            {
                HienThiThongBao("Chưa chọn loại sách");
            }
            else if (int.Parse(ddlThemSoLuong.SelectedValue) == 0)
            {
                HienThiThongBao("Chưa chọn số lượng");
            }
            else if (txtThemNhaXuatBan.Text.Trim().Length >= 50 && txtThemNhaXuatBan.Text.Trim().Length == 0)
            {
                HienThiThongBao("Nhà xuất bản không được để trống hoặc dài hơn 50 ký tự");
            }
            else if (int.TryParse(txtThemGiaTien.Text.Trim(), out empty) == false || int.Parse(txtThemGiaTien.Text.Trim()) <= 0 || int.Parse(txtThemGiaTien.Text.Trim()) > 10000000)
            {
                HienThiThongBao("Chưa nhập giá tiền hoặc giá tiền nhập sai");
            }
            else if (txtThemTacGia.Text.Trim().Length <= 0 || txtThemTacGia.Text.Trim().Length >= 100)
            {
                HienThiThongBao("Tác giả không được để trống hoặc dài quá 100 ký tự");
            }
            else if (!fuThemHinh.HasFile)
            {
                HienThiThongBao("Chưa chọn hình");
            }
            else if (txtThemMoTa.Text.Trim().Length >= 500)
            {
                HienThiThongBao("Mô tả chỉ cho phép tối đa 500 ký tự");
            }
            else if (item != null && item.TacGia.ToLower() == txtThemTacGia.Text.Trim().ToLower())
            {
                HienThiThongBao("Sách đã tồn tại");
            }
            else
            {
                Sach sach = new Sach();
                sach.MaLoai = int.Parse(ddlThemLoai.SelectedValue);
                sach.TenSach = txtThemTenSach.Text;
                sach.NhaXuatBan = txtThemNhaXuatBan.Text;
                sach.SoLuong = int.Parse(ddlThemSoLuong.SelectedValue);
                sach.GiaTien = long.Parse(txtThemGiaTien.Text);
                sach.TacGia = txtThemTacGia.Text;
                sach.NgayCapNhat = DateTime.Now;
                sach.Mota = txtThemMoTa.Text;
                sach.Hinh = fuThemHinh.FileName;
                fuThemHinh.SaveAs(MapPath("Images\\" + sach.Hinh));
                if (lib.ThemSach(sach))
                {
                    DropDownList_Load();
                    GridviewSach_Load();
                    HienThiThongBao("Thêm sách thành công");
                }
                else
                {
                    HienThiThongBao("Thêm sách không thành công, lỗi server, vui lòng thử lại sau");
                }

            }
        }
    }

    protected void btnTimKiem_Click(object sender, EventArgs e)
    {
        List<Sach> list = (List<Sach>)Session["listsach"]; 
        foreach (Sach item in listsach)
        {
            if (item.TenSach.ToLower().Contains(txtTimKiem.Text.Trim().ToLower()) || item.NhaXuatBan.ToLower().Contains(txtTimKiem.Text.Trim().ToLower()) || item.TacGia.ToLower().Contains(txtTimKiem.Text.Trim().ToLower()))
            {
                list.Add(item);
            }
        }
        Session["listsach"] = list;
        gdvSach.DataSource = list;
        gdvSach.DataBind();
        lblThongBao.Text = "";
    }
    protected void ddlLoaiSach_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (int.Parse(ddlLoaiSach.SelectedValue.Trim()) != 0)
        {
            List<Sach> list = new List<Sach>();
            foreach (Sach item in listsach)
            {
                if (item.MaLoai == int.Parse(ddlLoaiSach.SelectedValue))
                {
                    list.Add(item);
                }
            }
            Session["listsach"] = list;
            gdvSach.DataSource = list;
            gdvSach.DataBind();
        }
        else
        {
            gdvSach.DataSource = listsach;
            gdvSach.DataBind();
        }
        lblThongBao.Text = "";
    }
    protected void gdvSach_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gdvSach.EditIndex = e.NewEditIndex;
        Label lblLoai = (Label)gdvSach.Rows[e.NewEditIndex].FindControl("lblLoai");
        Label lblSoLuong = (Label)gdvSach.Rows[e.NewEditIndex].FindControl("lblSoLuong");
        Image imgHinh = (Image)gdvSach.Rows[e.NewEditIndex].FindControl("imgHinh");
        CheckBox cbxTrangThai = (CheckBox)gdvSach.Rows[e.NewEditIndex].FindControl("cbxTrangThai");

        gdvSach.DataSource = (List<Sach>)Session["listsach"];
        gdvSach.DataBind();
        DropDownList ddlSuaLoai = (DropDownList)gdvSach.Rows[e.NewEditIndex].FindControl("ddlSuaLoai");
        DropDownList ddlSuaSoLuong = (DropDownList)gdvSach.Rows[e.NewEditIndex].FindControl("ddlSuaSoLuong");
        FileUpload fuSuaHinh = (FileUpload)gdvSach.Rows[e.NewEditIndex].FindControl("fuSuaHinh");
        CheckBox cbxSuaTrangThai = (CheckBox)gdvSach.Rows[e.NewEditIndex].FindControl("cbxSuaTrangThai");

        cbxSuaTrangThai.Checked = cbxTrangThai.Checked;
        listloai = lib.LietKeTatCaLoai();
        Loai item = listloai.SingleOrDefault(loai => loai.TenLoai.Equals(lblLoai.Text));
        ddlSuaLoai.SelectedValue = item.MaLoai.ToString();
        ddlSuaSoLuong.SelectedValue = lblSoLuong.Text.Trim();
        lblThongBao.Text = "";
    }

    protected void gdvSach_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        gdvSach.EditIndex = -1;
        GridviewSach_Load();
    }

    protected void gdvSach_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        Button btnOK = (Button)gdvSach.Rows[e.RowIndex].FindControl("btnOK");
        DropDownList ddlSuaLoai = (DropDownList)gdvSach.Rows[e.RowIndex].FindControl("ddlSuaLoai");
        TextBox txtSuaNhaXuatBan = (TextBox)gdvSach.Rows[e.RowIndex].FindControl("txtSuaNhaXuatBan");
        DropDownList ddlSuaSoLuong = (DropDownList)gdvSach.Rows[e.RowIndex].FindControl("ddlSuaSoLuong");
        FileUpload fuSuaHinh = (FileUpload)gdvSach.Rows[e.RowIndex].FindControl("fuSuaHinh");
        TextBox txtSuaTenSach = (TextBox)gdvSach.Rows[e.RowIndex].FindControl("txtSuaTenSach");
        TextBox txtSuaGiaTien = (TextBox)gdvSach.Rows[e.RowIndex].FindControl("txtSuaGiaTien");
        TextBox txtSuaTacGia = (TextBox)gdvSach.Rows[e.RowIndex].FindControl("txtSuaTacGia");
        TextBox txtSuaMoTa = (TextBox)gdvSach.Rows[e.RowIndex].FindControl("txtSuaMoTa");
        CheckBox cbxSuaTrangThai = (CheckBox)gdvSach.Rows[e.RowIndex].FindControl("cbxSuaTrangThai");

        Sach item = listsach.SingleOrDefault(s => s.TenSach.Equals(txtSuaTenSach.Text));
        int empty;

        if (txtSuaTenSach.Text.Trim().Length == 0 || txtSuaTenSach.Text.Trim().Length >= 100)
        {
            HienThiThongBao("Tên sách không được để trống hoặc dài quá 100 ký tự");
        }
        else if (int.Parse(ddlSuaLoai.SelectedValue) == 0)
        {
            HienThiThongBao("Chưa chọn loại sách");
        }
        else if (int.Parse(ddlSuaSoLuong.SelectedValue) == 0)
        {
            HienThiThongBao("Chưa chọn số lượng");
        }
        else if (txtSuaNhaXuatBan.Text.Trim().Length >= 50 && txtSuaNhaXuatBan.Text.Trim().Length==0)
        {
            HienThiThongBao("Nhà xuất bản không được để trống hoặc dài hơn 50 ký tự");
        }
        else if (int.TryParse(txtSuaGiaTien.Text.Trim(), out empty) == false || int.Parse(txtSuaGiaTien.Text.Trim()) <= 0 || int.Parse(txtSuaGiaTien.Text.Trim()) > 10000000)
        {
            HienThiThongBao("Chưa nhập giá tiền hoặc giá tiền nhập sai");
        }
        else if (txtSuaTacGia.Text.Trim().Length <= 0 || txtSuaTacGia.Text.Trim().Length >= 100)
        {
            HienThiThongBao("Tác giả không được để trống hoặc dài quá 100 ký tự");
        }
        else if (txtSuaMoTa.Text.Trim().Length >= 500)
        {
            HienThiThongBao("Mô tả chỉ cho phép tối đa 500 ký tự");
        }
        else if (item != null && item.MaSach != int.Parse(btnOK.CommandArgument.Trim()) && item.TacGia.ToLower() == txtSuaTacGia.Text.Trim().ToLower())
        {
            HienThiThongBao("Đã tồn tại sách với cùng tên sách và tác giả");
        }
        else
        {
            Sach sach = new Sach();
            sach.MaSach = int.Parse(btnOK.CommandArgument.Trim());
            sach.MaLoai = int.Parse(ddlSuaLoai.SelectedValue);
            sach.TenSach = txtSuaTenSach.Text;
            sach.NhaXuatBan = txtSuaNhaXuatBan.Text;
            sach.SoLuong = int.Parse(ddlSuaSoLuong.SelectedValue);
            sach.GiaTien = long.Parse(txtSuaGiaTien.Text);
            sach.TacGia = txtSuaTacGia.Text;
            sach.NgayCapNhat = DateTime.Now;
            sach.Mota = txtSuaMoTa.Text;
            sach.TrangThai = cbxSuaTrangThai.Checked;
            if (fuSuaHinh.HasFile)
            {
                sach.Hinh = fuSuaHinh.FileName;
                fuSuaHinh.SaveAs(MapPath("Images\\" + sach.Hinh));
            }
            else
            {
                sach.Hinh = listsach.SingleOrDefault(s => s.MaSach.Equals(int.Parse(btnOK.CommandArgument))).Hinh;
            }
            if (lib.SuaSach(sach))
            {
                DropDownList_Load();
                HienThiThongBao("Sửa thông tin sách thành công");
                gdvSach.EditIndex = -1;
                GridviewSach_Load();
            }
            else
            {
                HienThiThongBao("Sửa thông tin sách không thành công, lỗi server, vui lòng thử lại sau");
            }
        }
    }
    protected void gdvSach_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gdvSach.PageIndex = e.NewPageIndex;
        gdvSach.DataSource = (List<Sach>)Session["listsach"];
        gdvSach.DataBind();
    }
    protected void cbxHienThi_CheckedChanged(object sender, EventArgs e)
    {
        if (!cbxHienThi.Checked)
        {
            gdvSach.DataSource = listsach;
            gdvSach.DataBind();
        }
        else
        {
            List<Sach> list = (List<Sach>)Session["listsach"];
            gdvSach.DataSource = list.Where(s => s.TrangThai.Equals(true)).ToList();
            gdvSach.DataBind();
        }

    }
    protected void chbHetHang_CheckedChanged(object sender, EventArgs e)
    {
        if (chbHetHang.Checked)
        {
            List<Sach> list = (List<Sach>)Session["listsach"];
            gdvSach.DataSource = list.Where(s => s.SoLuong.Equals(0)).ToList();
            gdvSach.DataBind();
        }
        else
        {
            gdvSach.DataSource = listsach;
            gdvSach.DataBind();
        }
    }
}